const express = require('express')
const ioredis = require('./ioredis')

const app = express()

// application/json
app.use(express.json())

/**
 * 捡一个漂流瓶
 */
app.get('/:user(&:type)?', async (req, res) => {
  try {
    const ret = await ioredis.getBottle()
    if (ret) {
      res.status(200).json({
        code: 1, 
        msg: '成功捡到一个漂流瓶',
        ...ret
      })
    } else {
      res.status(200).json({
        code: 1, 
        msg: '没有漂流瓶',
        ...ret
      })
    }
  } catch (err) {
    res.status(500).json({
      code: 0, 
      msg: err.message,
    })
  }
})

/**
 * 扔一个漂流瓶
 */
app.post('/', async (req, res) => {
  // console.log(req.body)
  const { owner, type, content, time } = req.body
  if (!owner) {
    return res.status(422).json({ error: '请求参数缺少owner' })
  } else if (!type) {
    return res.status(422).json({ error: '请求参数缺少type' })
  } else if (!content) {
    return res.status(422).json({ error: '请求参数缺少content' })
  } else if (!['male', 'female'].includes(type)) {
    return res.status(422).json({ error: 'type类型错误'})
  }
  try {
    const ret = await ioredis.driftBottle({
      time: time || Date.now(),
      owner,
      type,
      content
    })
    res.status(201).send({
      code: 1,
      msg: '成功扔出一个漂流瓶'
    })
  } catch (err) {
    res.status(500).json({
      code: 0,
      msg: err.message || '请求错误'
    })
  }
})

/**
 * 统一错误处理
 */
app.use((err, req, res, next) => {
  res.status(500).json({
    error: err.message
  })
})

app.listen(3000, () => {
  console.log('服务器已启动');
})
